<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    const obj = {
      uname: 'cxk',
      age: 18,
      hobby: ['乒乓球', '足球'],
      family: {
        baby: '马嘉祺'
      }
    }
    // 利用递归函数来实现深拷贝
    const o = {}
    // 封装了一个简易版的深拷贝函数
    function deepCopy(newObj, oldObj) {
      debugger
      for (let k in oldObj) {
        // 处理数组问题  因为数组也是对象，所以一定一定数组写在对象前面（先数组后对象），否则覆盖出问题
        if (oldObj[k] instanceof Array) {
          newObj[k] = []
          // newObj[k]  接收  []  hobby
          // oldObj[k]  就是  ['乒乓球', '足球']
          deepCopy(newObj[k], oldObj[k])
        } else if (oldObj[k] instanceof Object) {
          newObj[k] = {}
          // newObj[k]  接收  {}  
          // oldObj[k]  就是  
          deepCopy(newObj[k], oldObj[k])
        } else {
          // k 属性名（uname，age）   oldObj[k] 属性值（cxk，18）
          // newObj[k] === o.uname/o.age   给新对象添加属性
          newObj[k] = oldObj[k]
        }
      }
    }
    deepCopy(o, obj)  // 函数调用  两个参数    o 新对象  obj 旧对象
    console.log(o)  // {uname: 'cxk', age: 18, 羽毛球, 马嘉祺没妈}
    o.age = 20
    o.hobby[0] = '羽毛球'
    o.family.baby = '马嘉祺没妈'
    console.log(o)  // {uname: 'cxk', age: 20, 羽毛球, 马嘉祺没妈}
    console.log(obj)  // {uname: 'cxk', age: 18, 乒乓球, 马嘉祺}
  </script>
</body>

</html>